home *** CD-ROM | disk | FTP | other *** search
/ Isometric Game Programming with DirectX 7.0 / Isometric Game Programming.iso / source / chapter2 / isohex2_4 / isohex2_4.cpp next >
C/C++ Source or Header  |  2000-05-13  |  7KB  |  276 lines

  1. /*****************************************************************************
  2. IsoHex2_4.cpp
  3. Ernest S. Pazera
  4. 13MAY2000
  5. Start a WIN32 Application Workspace, add in this file
  6. No other libs are required
  7. *****************************************************************************/
  8.  
  9. //////////////////////////////////////////////////////////////////////////////
  10. //INCLUDES
  11. //////////////////////////////////////////////////////////////////////////////
  12. #define WIN32_LEAN_AND_MEAN  
  13.  
  14. #include <windows.h>   
  15.  
  16. //////////////////////////////////////////////////////////////////////////////
  17. //DEFINES
  18. //////////////////////////////////////////////////////////////////////////////
  19. //name for our window class
  20. #define WINDOWCLASS "ISOHEX2"
  21. //title of the application
  22. #define WINDOWTITLE "IsoHex 2-4"
  23.  
  24. //////////////////////////////////////////////////////////////////////////////
  25. //PROTOTYPES
  26. //////////////////////////////////////////////////////////////////////////////
  27. bool Prog_Init();//game data initalizer
  28. void Prog_Loop();//main game loop
  29. void Prog_Done();//game clean up
  30.  
  31. //////////////////////////////////////////////////////////////////////////////
  32. //GLOBALS
  33. //////////////////////////////////////////////////////////////////////////////
  34. HINSTANCE hInstMain=NULL;//main application handle
  35. HWND hWndMain=NULL;//handle to our main window
  36. HPEN hpenNew=NULL;//new pen
  37. HPEN hpenOld=NULL;//old pen
  38.  
  39. //////////////////////////////////////////////////////////////////////////////
  40. //WINDOWPROC
  41. //////////////////////////////////////////////////////////////////////////////
  42. LRESULT CALLBACK TheWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
  43. {
  44.     //which message did we get?
  45.     switch(uMsg)
  46.     {
  47.     case WM_LBUTTONDOWN:
  48.         {
  49.             //extract x and y from lparam
  50.             int x=LOWORD(lParam);
  51.             int y=HIWORD(lParam);
  52.  
  53.             //borrow the main window's DC
  54.             HDC hdc=GetDC(hWndMain);
  55.  
  56.             //update the CP
  57.             MoveToEx(hdc,x,y,NULL);
  58.  
  59.             //return the dc to the system
  60.             ReleaseDC(hWndMain,hdc);
  61.  
  62.             //handled, return 0
  63.             return(0);
  64.         }break;
  65.     case WM_MOUSEMOVE:
  66.         {
  67.             //if left button is down
  68.             if(wParam & MK_LBUTTON)
  69.             {
  70.                 //extract x and y from lparam
  71.                 int x=LOWORD(lParam);
  72.                 int y=HIWORD(lParam);
  73.  
  74.                 //borrow the main window's DC
  75.                 HDC hdc=GetDC(hWndMain);
  76.  
  77.                 //line to the x,y position
  78.                 LineTo(hdc,x,y);
  79.  
  80.                 //return the dc to the system
  81.                 ReleaseDC(hWndMain,hdc);
  82.             }
  83.  
  84.             //handled, return 0
  85.             return(0);
  86.         }break;
  87.     case WM_RBUTTONDOWN:
  88.         {
  89.                 //extract x and y from lparam
  90.                 int x=LOWORD(lParam);
  91.                 int y=HIWORD(lParam);
  92.  
  93.                 //borrow the main window's DC
  94.                 HDC hdc=GetDC(hWndMain);
  95.  
  96.                 //line to the x,y position
  97.                 ExtFloodFill(hdc,x,y,RGB(255,255,255),FLOODFILLBORDER);
  98.  
  99.                 //return the dc to the system
  100.                 ReleaseDC(hWndMain,hdc);
  101.         }break;
  102.     case WM_DESTROY://the window is being destroyed
  103.         {
  104.  
  105.             //tell the application we are quitting
  106.             PostQuitMessage(0);
  107.  
  108.             //handled message, so return 0
  109.             return(0);
  110.  
  111.         }break;
  112.     case WM_PAINT://the window needs repainting
  113.         {
  114.             //a variable needed for painting information
  115.             PAINTSTRUCT ps;
  116.             
  117.             //start painting
  118.             HDC hdc=BeginPaint(hwnd,&ps);
  119.  
  120.             /////////////////////////////
  121.             //painting code would go here
  122.             /////////////////////////////
  123.  
  124.             //end painting
  125.             EndPaint(hwnd,&ps);
  126.                         
  127.             //handled message, so return 0
  128.             return(0);
  129.         }break;
  130.     }
  131.  
  132.     //pass along any other message to default message handler
  133.     return(DefWindowProc(hwnd,uMsg,wParam,lParam));
  134. }
  135.  
  136.  
  137. //////////////////////////////////////////////////////////////////////////////
  138. //WINMAIN
  139. //////////////////////////////////////////////////////////////////////////////
  140. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  141. {
  142.     //assign instance to global variable
  143.     hInstMain=hInstance;
  144.  
  145.     //create window class
  146.     WNDCLASSEX wcx;
  147.  
  148.     //set the size of the structure
  149.     wcx.cbSize=sizeof(WNDCLASSEX);
  150.  
  151.     //class style
  152.     wcx.style=CS_OWNDC | CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
  153.  
  154.     //window procedure
  155.     wcx.lpfnWndProc=TheWindowProc;
  156.  
  157.     //class extra
  158.     wcx.cbClsExtra=0;
  159.  
  160.     //window extra
  161.     wcx.cbWndExtra=0;
  162.  
  163.     //application handle
  164.     wcx.hInstance=hInstMain;
  165.  
  166.     //icon
  167.     wcx.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  168.  
  169.     //cursor
  170.     wcx.hCursor=LoadCursor(NULL,IDC_ARROW);
  171.  
  172.     //background color
  173.     wcx.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
  174.  
  175.     //menu
  176.     wcx.lpszMenuName=NULL;
  177.  
  178.     //class name
  179.     wcx.lpszClassName=WINDOWCLASS;
  180.  
  181.     //small icon
  182.     wcx.hIconSm=NULL;
  183.  
  184.     //register the window class, return 0 if not successful
  185.     if(!RegisterClassEx(&wcx)) return(0);
  186.  
  187.     //create main window
  188.     hWndMain=CreateWindowEx(0,WINDOWCLASS,WINDOWTITLE, WS_BORDER | WS_SYSMENU | WS_VISIBLE,0,0,320,240,NULL,NULL,hInstMain,NULL);
  189.  
  190.     //error check
  191.     if(!hWndMain) return(0);
  192.  
  193.     //if program initialization failed, then return with 0
  194.     if(!Prog_Init()) return(0);
  195.  
  196.     //message structure
  197.     MSG msg;
  198.  
  199.     //message pump
  200.     for(;;)    
  201.     {
  202.         //look for a message
  203.         if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  204.         {
  205.             //there is a message
  206.  
  207.             //check that we arent quitting
  208.             if(msg.message==WM_QUIT) break;
  209.             
  210.             //translate message
  211.             TranslateMessage(&msg);
  212.  
  213.             //dispatch message
  214.             DispatchMessage(&msg);
  215.         }
  216.  
  217.         //run main game loop
  218.         Prog_Loop();
  219.     }
  220.     
  221.     //clean up program data
  222.     Prog_Done();
  223.  
  224.     //return the wparam from the WM_QUIT message
  225.     return(msg.wParam);
  226. }
  227.  
  228. //////////////////////////////////////////////////////////////////////////////
  229. //INITIALIZATION
  230. //////////////////////////////////////////////////////////////////////////////
  231. bool Prog_Init()
  232. {
  233.     //create the new pen
  234.     hpenNew=CreatePen(PS_SOLID,0,RGB(255,255,255));
  235.  
  236.     //borrow dc from main window
  237.     HDC hdc=GetDC(hWndMain);
  238.  
  239.     //select new pen into dc
  240.     hpenOld=(HPEN)SelectObject(hdc,hpenNew);
  241.  
  242.     //release dc to system
  243.     ReleaseDC(hWndMain,hdc);
  244.  
  245.     return(true);//return success
  246. }
  247.  
  248. //////////////////////////////////////////////////////////////////////////////
  249. //CLEANUP
  250. //////////////////////////////////////////////////////////////////////////////
  251. void Prog_Done()
  252. {
  253.     //borrow dc from main window
  254.     HDC hdc=GetDC(hWndMain);
  255.  
  256.     //restore old pen to dc
  257.     SelectObject(hdc,hpenOld);
  258.  
  259.     //release dc to system
  260.     ReleaseDC(hWndMain,hdc);
  261.  
  262.     //delete new pen
  263.     DeleteObject(hpenNew);
  264. }
  265.  
  266. //////////////////////////////////////////////////////////////////////////////
  267. //MAIN GAME LOOP
  268. //////////////////////////////////////////////////////////////////////////////
  269. void Prog_Loop()
  270. {
  271.     ///////////////////////////
  272.     //main game logic goes here
  273.     ///////////////////////////
  274. }
  275.  
  276.